package annotation.test;

import annotation.MethodAnnotation;
import annotation.MyAnnotation;

import java.lang.annotation.Annotation;

public class MyClass {
    public void myMethod() {
        String annotationName = getMethodNameAnnotation();
        System.out.println(annotationName);
    }

    @MyAnnotation(value = "aaa1:bbb1:ccc1")
    public void myMethod1() {
        myMethod();
    }

    @SuppressWarnings("unchecked")
    private String getMethodNameAnnotation() {
        try {
            // 获取当前执行线程的栈跟踪元素数组
            StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
            // 栈跟踪数组的第二个元素是当前方法（即myMethod）
            StackTraceElement element = stackTrace[2];
            // 获取当前方法所在的类
            Class<?> clazz = Class.forName(element.getClassName());
            // 获取当前方法
            java.lang.reflect.Method method = clazz.getDeclaredMethod(element.getMethodName());
            // 获取当前方法上的所有注解
            java.lang.annotation.Annotation[] annotations = method.getAnnotations();
            if (annotations != null) {
                for (Annotation annotation : annotations) {
                    if (annotation instanceof MyAnnotation) {
                        return ((MyAnnotation) annotation).value();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.myMethod1();
    }
}